home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / rbbs_pc / addusers.zip / ADDUSERS.BAS < prev    next >
BASIC Source File  |  1989-04-16  |  24KB  |  745 lines

  1. ' $TITLE:    'ADDUSERS -- Copyright 1989, W. F. Muldrow'
  2. '             Add users in the main user's file to other conferences
  3. '             for which they have the appropriate security level
  4. '
  5. 1010  DEF SEG
  6.       WIDTH 80,25
  7.       SCREEN 0,0,0
  8.       KEY OFF
  9.       DEFINT A-Z
  10.       PRINT
  11.       PRINT "ADD-USERS -- RBBS user file maintenance routine by Warren Muldrow"
  12.       PRINT
  13. 1020  ON ERROR GOTO 9900
  14. '
  15. '     Read the RBBS-PC configuration file to find the main message/user files
  16. '
  17. 1030  GOSUB 4000
  18.       IF EC > 0 THEN _
  19.          GOTO 1999
  20. '
  21. '     The ADDUSERS.DEF file will contain a list of conferences to which
  22. '     users should be added
  23. '
  24. 1040  OPEN "ADDUSERS.DEF" FOR INPUT SHARED AS 1
  25.       IF EC > 0 THEN _
  26.          GOTO 1999
  27. '
  28. '     Open the main users file as file # 3
  29. '     Use it's drive and path as default for other user files
  30. '
  31. 1050  GOSUB 9300
  32.       IF EC > 0 THEN _
  33.          GOTO 1999
  34.       CALL BRKFNAME (MAIN.USER.FILE$, MAIN.DR$, NM$, X$, TRUE)
  35. '
  36. '     Read conference names from the ADDUSERS.DEF file until end of file
  37. '
  38. 1100  IF EOF (1) THEN _
  39.          GOTO 1999
  40. '
  41. '     Convert the conference name to file names for messages and users
  42. '
  43. 1110  INPUT #1,CONF.NAME$
  44.       CALL BRKFNAME (CONF.NAME$,DR$,NM$,X$,TRUE)
  45.       IF DR$ = "" THEN _
  46.          ACTIVE.MESSAGE.FILE$ = MAIN.DR$ + NM$ + "M" + X$ : _
  47.          ACTIVE.USER.FILE$    = MAIN.DR$ + NM$ + "U" + X$ _
  48.       ELSE _
  49.          ACTIVE.MESSAGE.FILE$ = DR$ + NM$ + "M" + X$ : _
  50.          ACTIVE.USER.FILE$    = DR$ + NM$ + "U" + X$
  51. '
  52. '     Open the conference message file and read the checkpoint record for:
  53. '         Minimum security level for auto-add and
  54. '         Number of active user records
  55. '
  56. 1120  GOSUB 9200
  57. 1130  IF EC > 0 THEN _
  58.          CALL BRKFNAME (ACTIVE.MESSAGE.FILE$, DR$, NM$, X$, TRUE) : _
  59.          ACTIVE.MESSAGE.FILE$ = DR$ + NM$ + ".DEF" : _
  60.          GOSUB 9200 : _
  61.          IF EC > 0 THEN _
  62.             PRINT "Unable to open message file for " + CONF.NAME$ : _
  63.             GOTO 1100
  64. 1140  GET 2,1
  65. 1150  ACTIVE.USER.COUNT = VAL (MID$ (MESSAGE.RECORD$, 57, 5))
  66. 1160  ACTIVE.SEC.LEVEL  = CVI (MID$ (MESSAGE.RECORD$, 9, 2))
  67. '
  68. '     Open the conference user's file as file # 4
  69. '     Determine the maximum number of users from the file size
  70. '
  71. 1170  GOSUB 9400
  72. 1180  IF EC > 0 THEN _
  73.          CALL BRKFNAME (ACTIVE.USER.FILE$, DR$, NM$, X$, TRUE) : _
  74.          ACTIVE.USER.FILE$ = DR$ + NM$ + ".DEF" : _
  75.          GOSUB 9400 : _
  76.          IF EC > 0 THEN _
  77.             PRINT "Unable to open user file for " + CONF.NAME$ : _
  78.             CLOSE 2 : _
  79.             GOTO 1100
  80. 1190  ACTIVE.USER.LIMIT = INT (ACTIVE.USER.SIZE * .95)
  81. '
  82. '     Display current activity to the viewer to prevent boredom
  83. '
  84.       PRINT
  85.       PRINT CONF.NAME$ + "     " + ACTIVE.MESSAGE.FILE$ + "     " + _
  86.             ACTIVE.USER.FILE$ + "     Minimum security"; ACTIVE.SEC.LEVEL
  87.       PRINT
  88. '
  89. '     Read all user records from the main user file
  90. '     Empty records begin with a space or null (CHR$(32) or CHR$(0))
  91. '     Skip empty records, and users with security level below the
  92. '         minimum for auto-add
  93. '
  94. 1200  FOR I = 1 TO MAIN.USER.SIZE
  95. 1210  GET 3,I
  96. 1220  IF ASC(MAIN.USER.NAME$) <= ASC(" ") THEN _
  97.          GOTO 1310
  98.       IF ACTIVE.SEC.LEVEL > CVI (MAIN.SECURITY.LEVEL$) THEN _
  99.          GOTO 1310
  100. '
  101. '     Look for user in current conference.
  102. '     Skip if found, or if an invalid record number is returned
  103. '     Skip if the conference has become full
  104. '     Otherwise add the record to the conference user file
  105. '     Keep track of active user count for the message file checkpoint record
  106. '
  107. 1230  GOSUB 2000
  108. 1240  IF FOUND OR USER.INDEX = 0 THEN _
  109.          GOTO 1310
  110.       NAME$ = MAIN.USER.NAME$
  111.       CALL TRIMTRAIL (NAME$, " ")
  112. 1250  IF ACTIVE.USER.COUNT > ACTIVE.USER.LIMIT THEN _
  113.          PRINT "No room to add " + NAME$ + " to " + CONF.NAME$ : _
  114.          GOTO 1310
  115. 1260  LSET USER.RECORD$ = MAIN.USER.RECORD$
  116. 1270  LSET LAST.MESSAGE$ = MKI$ (0)
  117. 1280  PUT 4,USER.INDEX
  118. 1290  ACTIVE.USER.COUNT = ACTIVE.USER.COUNT + 1
  119. 1300  PRINT "     " + NAME$ + " security level"; _
  120.             CVI (MAIN.SECURITY.LEVEL$); "added to " + CONF.NAME$
  121. 1310  NEXT I
  122. '
  123. '     Put the updated user count into the message file checkpoint record
  124. '         and update the message file
  125. '
  126. 1320  MID$ (MESSAGE.RECORD$, 57, 5) = STR$ (ACTIVE.USER.COUNT)
  127. 1330  PUT 2,1
  128. 1340  CLOSE 2, 4
  129.       PRINT
  130. 1350  GOTO 1100
  131. '
  132. '     That's all, Folks
  133. '
  134. 1999  PRINT "Processing ended normally."
  135.       CLOSE 1, 2, 3, 4
  136.       END
  137. '
  138. ' FINDUSER - subroutine to search users file for a name
  139. '            (stolen from RBBS-PC source)
  140. '
  141. 2000  EC = 0
  142.       FOUND = 0
  143.       HASH.VALUE$ = SPACE$ (LEN.HASH)
  144.       INDIV.VALUE$ = SPACE$ (LEN.INDIV)
  145.       EMPTY.REC$ = HASH.VALUE$
  146.       NEWUSER$ = LEFT$("NEWUSER  ",LEN.HASH + 2)
  147.       IF START.HASH > 0 THEN _
  148.          HASH.VALUE$ = MID$(MAIN.USER.RECORD$,START.HASH,LEN.HASH)
  149.       IF START.INDIV > 0 THEN _
  150.          INDIV.VALUE$ = MID$(MAIN.USER.RECORD$,START.INDIV,LEN.INDIV)
  151.       IF HASH.VALUE$ = SPACE$(LEN(HASH.VALUE$)) THEN _
  152.          RETURN
  153.       X$ = HASH.VALUE$
  154.       Y$ = INDIV.VALUE$
  155.       CALL TRIMTRAIL (HASH.VALUE$, " ")
  156.       CALL TRIMTRAIL (INDIV.VALUE$, " ")
  157. 2004  GOSUB 3000
  158.       HASH.VALUE$ = X$
  159.       INDIV.VALUE$ = Y$
  160.       X$ = SPACE$ (LEN.HASH)
  161.       Y$ = SPACE$ (LEN.INDIV)
  162.       REUSE.INDEX = 0
  163.       USER.INDEX = PRIME.HASH
  164. 2010  GET 4,USER.INDEX
  165. 2011  IF EC > 0 THEN _
  166.          IF EC = 63 THEN _
  167.             EC = 0 : _
  168.             GOTO 2021 _
  169.          ELSE _
  170.             EC = 0 : _
  171.             GOTO 2020
  172. 2012  IF START.HASH > 0 THEN _
  173.          X$ = MID$(USER.RECORD$, START.HASH,  LEN.HASH)
  174. 2013  IF START.INDIV > 0 THEN _
  175.          Y$ = MID$(USER.RECORD$, START.INDIV, LEN.INDIV)
  176. 2015  IF X$ = HASH.VALUE$ THEN _
  177.          IF START.INDIV < 1 THEN _
  178.             FOUND = TRUE : _
  179.             GOTO 2022 _
  180.          ELSE IF INSTR (Y$, INDIV.VALUE$) > 0 OR ASC(Y$) = ASC(" ") THEN _
  181.             FOUND = TRUE : _
  182.             GOTO 2022
  183. 2016  IF X$ = EMPTY.REC$ THEN _
  184.          USER.INDEX = REUSE.INDEX - (REUSE.INDEX = 0) * USER.INDEX : _
  185.          FOUND = FALSE : _
  186.          GOTO 2022
  187. 2017  IF ASC(X$) = 0 OR INSTR(X$, NEWUSER$) > 1 THEN _
  188.          IF REUSE.INDEX = 0 THEN _
  189.             REUSE.INDEX = USER.INDEX
  190. 2020  USER.INDEX = USER.INDEX + SECOND.HASH
  191.       IF USER.INDEX > ACTIVE.USER.SIZE - 1 THEN _
  192.          USER.INDEX = USER.INDEX - ACTIVE.USER.SIZE
  193.       GOTO 2010
  194. 2021  IF REUSE.INDEX = 0 THEN _
  195.          REUSE.INDEX = USER.INDEX
  196.       GOTO 2020
  197. 2022  RETURN
  198. '
  199. ' HASHRBBS - subroutine to determine where to look for user
  200. '            (Stolen from RBBS-PC)
  201. '
  202. 3000  SECOND.HASH = (ASC (MID$ (HASH.VALUE$, 2, 1)) * 10 + 7) MOD _
  203.                     ACTIVE.USER.SIZE
  204. 3010  PRIME.HASH = ((ASC (HASH.VALUE$) * 100 + _
  205.                     ASC (MID$ (HASH.VALUE$, (LEN (HASH.VALUE$) / 2) + .1, 1)) _
  206.                     * 10 + ASC (RIGHT$ (HASH.VALUE$, 1))) _
  207.                     MOD ACTIVE.USER.SIZE) + 1
  208. 3020  RETURN
  209. '
  210. '     Program Initialization Routine
  211. '            (Stolen from RBBS-PC)
  212. '
  213. 4000  CRLF$ = CHR$(13) + CHR$(10)
  214.       VERSION.ID$ = "CPC17.1D"
  215.       TRUE = (1 = 1)
  216.       FALSE = NOT TRUE
  217.       CONFIG.FILENAME$ = "RBBS-PC.DEF"  ' Try config file for single node
  218.       GOSUB 5000
  219.       IF EC < 1 THEN _
  220.          GOTO 4010
  221.       CONFIG.FILENAME$ = "RBBS1PC.DEF"  ' Try config file for node 1
  222.       GOSUB 5000
  223.       IF EC > 0 THEN _
  224.          PRINT "Unable to read RBBS-PC configuration file." : _
  225.          EC = 999 : _
  226.          GOTO 4020
  227. 4010  ACTIVE.MESSAGE.FILE$ = MAIN.MESSAGE.FILE$
  228.       GOSUB 9200
  229.       IF EC > 0 THEN _
  230.          PRINT "Unable to open main message file " + MAIN.MESSAGE.FILE$ : _
  231.          EC = 999 : _
  232.          GOTO 4020
  233.       CLOSE 2
  234. 4020  RETURN
  235.  
  236. '
  237. ' READDEF - subroutine to read RBBS-PC.DEF file
  238. '            (Stolen from RBBS-PC)
  239. '
  240. 5000  GOSUB 9100
  241.       IF EC > 0 THEN _
  242.          RETURN
  243. 5002  INPUT #2,DF$, _
  244.                DOWNLOAD.DRIVES$, _
  245.                SYSOP.PASSWORD.1$, _
  246.                SYSOP.PASSWORD.2$, _
  247.                SYSOP.FIRST.NAME$, _
  248.                SYSOP.LAST.NAME$, _
  249.                REQUIRED.RINGS, _
  250.                START.OFFICE.HOURS, _
  251.                END.OFFICE.HOURS, _
  252.                MINUTES.PER.SESSION!, _
  253.                DF, _
  254.                DF, _
  255.                UPLOAD.DIRECTORY$, _
  256.                EXPERT.USER, _
  257.                ACTIVE.BULLETINS, _
  258.                PROMPT.BELL, _
  259.                DF, _
  260.                MENUS.CAN.PAUSE, _
  261.                MENU$, _
  262.                MENU$, _
  263.                MENU$, _
  264.                MENU$, _
  265.                MENU$, _
  266.                MENU$, _
  267.                CONFERENCE.MENU$, _
  268.                DF, _
  269.                WELCOME.INTERRUPTABLE, _
  270.                REMIND.FILE.TRANSFERS, _
  271.                PAGE.LENGTH, _
  272.                MAX.MESSAGE.LINES.DEF, _
  273.                DOORS.AVAILABLE, _
  274.                DF$, _
  275.                MAIN.MESSAGE.FILE$, _
  276.                MAIN.MESSAGE.BACKUP$
  277. 5003  INPUT #2,X$, _
  278.                COMMENTS.FILE$, _
  279.                MAIN.USER.FILE$, _
  280.                WELCOME.FILE$, _
  281.                NEWUSER.FILE$, _
  282.                MAIN.DIRECTORY.EXTENTION$
  283. 5004  CALL BRKFNAME (X$,Y$,DF$,Z$,FALSE)
  284. 5005  IF DF$ <> "" THEN _
  285.          CALLERS.FILE$ = X$
  286. 5006  INPUT #2,COM.PORT$, _
  287.                BULLETINS.OPTIONAL, _
  288.                MODEM.INIT.COMMAND$, _
  289.                RTS$, _
  290.                DF, _
  291.                FG, _
  292.                BG, _
  293.                BORDER, _
  294.                RBBS.BAT$ , _
  295.                RCTTY.BAT$, _
  296.                OMIT.MAIN.DIRECTORY$, _
  297.                FIRST.NAME.PROMPT$, _
  298.                HELP$, _
  299.                HELP$, _
  300.                HELP$, _
  301.                HELP$, _
  302.                BULLETIN.MENU$, _
  303.                BULLETIN.PREFIX$, _
  304.                DF$, _
  305.                MESSAGE.REMINDER, _
  306.                REQUIRE.NON.ASCII, _
  307.                ASK.EXTENDED.DESC, _
  308.                MAXIMUM.NUMBER.OF.NODES, _
  309.                NETWORK.TYPE, _
  310.                RECYCLE.TO.DOS, _
  311.                DF, _
  312.                DF, _
  313.                TRASHCAN.FILE$
  314. 5007  INPUT #2,MINIMUM.LOGON.SECURITY, _
  315.                DEFAULT.SECURITY.LEVEL, _
  316.                SYSOP.SECURITY.LEVEL, _
  317.                FILESEC.FILE$, _
  318.                SYSOP.MENU.SECURITY.LEVEL, _
  319.                CONFMAIL.LIST$, _
  320.                MAXIMUM.VIOLATIONS, _
  321.                OPT.SEC, _
  322.                OPT.SEC, _
  323.                OPT.SEC, _
  324.                OPT.SEC, _
  325.                OPT.SEC, _
  326.                OPT.SEC, _
  327.                OPT.SEC, _
  328.                PASSWORDS.FILE$, _
  329.                MAXIMUM.PASSWORD.CHANGES, _
  330.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _
  331.                OVERWRITE.SECURITY.LEVEL, _
  332.                DOORS.TERMINAL.TYPE, _
  333.                MAX.PER.DAY
  334. 5008  INPUT #2,OPT.SEC, _
  335.                OPT.SEC, _
  336.                OPT.SEC, _
  337.                OPT.SEC, _
  338.                OPT.SEC, _
  339.                OPT.SEC, _
  340.                OPT.SEC, _
  341.                OPT.SEC, _
  342.                OPT.SEC, _
  343.                OPT.SEC, _
  344.                OPT.SEC, _
  345.                OPT.SEC, _
  346.                OPT.SEC, _
  347.                OPT.SEC, _
  348.                OPT.SEC, _
  349.                OPT.SEC, _
  350.                OPT.SEC, _
  351.                OPT.SEC, _
  352.                MIN.NEWCALLER.BAUD, _
  353.                WAIT.BEFORE.DISCONNECT
  354. 5009  INPUT #2,OPT.SEC, _
  355.                OPT.SEC, _
  356.                OPT.SEC, _
  357.                OPT.SEC, _
  358.                OPT.SEC, _
  359.                OPT.SEC, _
  360.                OPT.SEC, _
  361.                OPT.SEC, _
  362.                OPT.SEC, _
  363.                OPT.SEC, _
  364.                OPT.SEC, _
  365.                OPT.SEC, _
  366.                OPT.SEC, _
  367.                OPT.SEC, _
  368.                OPT.SEC, _
  369.                OPT.SEC, _
  370.                OPT.SEC, _
  371.                OPT.SEC, _
  372.                OPT.SEC, _
  373.                OPT.SEC, _
  374.                OPT.SEC, _
  375.                OPT.SEC, _
  376.                OPT.SEC, _
  377.                OPT.SEC, _
  378.                UPLOAD.TIME.FACTOR!, _
  379.                COMPUTER.TYPE, _
  380.                REMIND.PROFILE, _
  381.                RBBS.NAME$, _
  382.                COMMANDS.BETWEEN.RINGS, _
  383.                MNP.SUPPORT, _
  384.                PAGING.PRINTER.SUPPORT$, _
  385.                MODEM.INIT.BAUD$
  386. 5010  IF EC > 0 THEN _
  387.          RETURN
  388. 5011  INPUT #2,TURN.PRINTER.OFF,_
  389.                DIRECTORY.PATH$, _
  390.                MIN.SEC.TO.VIEW, _
  391.                LIMIT.SEARCH.TO.FMS, _
  392.                DEFAULT.CATEGORY.CODE$, _
  393.                DIR.CATEGORY.FILE$, _
  394.                NEW.FILES.CHECK, _
  395.                MAX.DESC.LEN, _
  396.                SHOW.SECTION, _
  397.                COMMANDS.IN.PROMPT, _
  398.                NEWUSER.SETS.DEFAULTS, _
  399.                HELP.PATH$, _
  400.                HELP.EXTENSION$, _
  401.                MAIN.COMMANDS$, _
  402.                FILE.COMMANDS$, _
  403.                UTIL.COMMANDS$, _
  404.                GLOBAL.COMMANDS$, _
  405.                SYSOP.COMMANDS$
  406. 5012  INPUT #2,RECYCLE.WAIT, _
  407.                OPT.SEC, _
  408.                OPT.SEC, _
  409.                OPT.SEC, _
  410.                OPT.SEC, _
  411.                OPT.SEC, _
  412.                OPT.SEC, _
  413.                OPT.SEC, _
  414.                LIBRARY.DRIVE$, _
  415.                LIBRARY.DIRECTORY.PATH$, _
  416.                LIBRARY.DIRECTORY.EXTENTION$, _
  417.                LIBRARY.WORK.DISK.PATH$, _
  418.                LIBRARY.MAX.DISK, _
  419.                LIBRARY.MAX.DIRECTORY, _
  420.                LIBRARY.MAX.SUBDIR, _
  421.                LIBRARY.SUBDIR.PREFIX$, _
  422.                LIBRARY.ARCHIVE.PATH$, _
  423.                LIBRARY.ARCHIVE.PROGRAM$, _
  424.                LIBRARY.COMMANDS$
  425. 5013  INPUT #2,UPLOAD.PATH$, _
  426.                MAIN.FMS.DIRECTORY$, _
  427.                ANS.MENU$, _
  428.                REQUIRED.QUESTIONNAIRE$,_
  429.                REMEMBER.NEW.USERS,_
  430.                SURVIVE.NOUSER.ROOM,_
  431.                PROMPT.HASH$,_
  432.                START.HASH,_
  433.                LEN.HASH,_
  434.                PROMPT.INDIV$,_
  435.                START.INDIV,_
  436.                LEN.INDIV
  437. 5014  INPUT #2,BYPASS.MSGS, _
  438.                MUSIC, _
  439.                RESTRICT.BY.DATE, _
  440.                DAYS.TO.WARN, _
  441.                DAYS.IN.REGISTRATION.PERIOD, _
  442.                CALLBACK.VERIFICATION, _
  443.                RESTRICT.VALID.CMDS, _
  444.                NEW.USER.DEFAULT.MODE, _
  445.                NEW.USER.LINE.FEEDS, _
  446.                NEW.USER.NULLS, _
  447.                NEW.USER.BELL, _
  448.                NEW.USER.CASE, _
  449.                NEW.USER.MARGINS, _
  450.                WRAP.CALLERS.FILE$, _
  451.                REDIRECT.IO.METHOD, _
  452.                GO.TO.SHELL, _
  453.                HALT.ON.ERROR, _
  454.                NEW.PUBLIC.MSGS.SECURITY, _
  455.                NEW.PRIVATE.MSGS.SECURITY, _
  456.                SECURITY.NEEDED.TO.CHANGE.MSGS, _
  457.                SL.CATEGORIZE.UPLOADS, _
  458.                BAUDOT, _
  459.                TIME.TO.DROP.TO.DOS, _
  460.                EXPIRED.SECURITY, _
  461.                DTR.DROP.DELAY, _
  462.                ASK.IDENTITY, _
  463.                USE.EXTERNAL.XMODEM, _
  464.                BUFFER.SIZE, _
  465.                MLCOM, _
  466.                SHOOT.YOURSELF, _
  467.                F7.MESSAGE$, _
  468.                NEW.USER.DEFAULT.PROTOCOL$, _
  469.                NEW.USER.GRAPHICS$, _
  470.                NET.MAIL$, _
  471.                MAIN.DIRECTORY.NAME$, _
  472.                PROTO.DEF$, _
  473.                UPCAT.HELP$, _
  474.                ALWAYS.STREW.TO$, _
  475.                LAST.NAME.PROMPT$
  476. 5015  INPUT #2,PERSONAL.DRVPATH$, _
  477.                PERSONAL.DIR$, _
  478.                PERSONAL.BEGIN, _
  479.                PERSONAL.LEN, _
  480.                PERSONAL.PROTOCOL$, _
  481.                PERSONAL.CONCAT , _
  482.                PRIVATE.READ.SEC, _
  483.                PUBLIC.READ.SEC, _
  484.                SEC.CHANGE.MSG, _
  485.                KEEP.INIT.BAUD, _
  486.                MAIN.PUI$
  487. 5016  INPUT #2,DEFAULT.ECHOER$, _
  488.                HOST.ECHO.ON$, _
  489.                HOST.ECHO.OFF$
  490. 5017  INPUT #2,SWITCH.BACK, _
  491.                DEFAULT.LINE.ACK$, _
  492.                ALTDIR.EXTENSION$, _
  493.                DIRECTORY.PREFIX$
  494. 5018  INPUT #2,DF,_
  495.                MODEM.INIT.WAIT.TIME, _
  496.                MODEM.COMMAND.DELAY.TIME
  497. 5019  INPUT #2,TURBO.RBBS, _
  498.                SUBDIR.COUNT, _
  499.                DF, _
  500.                UPLOAD.TO.SUBDIR, _
  501.                DF, _
  502.                UPLOAD.SUBDIR$, _
  503.                MIN.OLDCALLER.BAUD, _
  504.                USE.EXTERNAL.YMODEM, _
  505.                DISKFULL.GO.OFFLINE, _
  506.                EXTENDED.LOGGING
  507. 5020  INPUT #2,MODEM.RESET.COMMAND$, _
  508.                MODEM.COUNT.RINGS.COMMAND$, _
  509.                MODEM.ANSWER.COMMAND$, _
  510.                MODEM.GO.OFFHOOK.COMMAND$
  511. 5021  INPUT #2,DISK.FOR.DOS$, _
  512.                DUMB.MODEM, _
  513.                COMMENTS.AS.MESSAGES
  514. 5022  INPUT #2,LSB,_
  515.                MSB,_
  516.                LINE.CONTROL.REGISTER,_
  517.                MODEM.CONTROL.REGISTER,_
  518.                LINE.STATUS.REGISTER,_
  519.                MODEM.STATUS.REGISTER
  520. 5023  INPUT #2,KEEP.TIME.CREDITS, _
  521.                XON.XOFF, _
  522.                ALLOW.CALLER.TURBO, _
  523.                USE.DEVICE.DRIVER$, _
  524.                PRELOG$, _
  525.                NEW.USER.QUESTIONNAIRE$, _
  526.                EPILOG$, _
  527.                REGISTRATION.PROGRAM$, _
  528.                QUES.PATH$, _
  529.                USER.LOCATION$, _
  530.                DF$, _
  531.                DF$, _
  532.                DF$, _
  533.                ENFORCE.UPLOAD.DOWNLOAD.RATIOS, _
  534.                SIZE.OF.STACK, _
  535.                SECURITY.EXEMPT.FROM.EPILOG, _
  536.                USE.BASIC.WRITES, _
  537.                DOSANSI, _
  538.                ESCAPE.INSECURE, _
  539.                USE.DIR.ORDER, _
  540.                ADD.DIR.SECURITY, _
  541.                MAX.EXTENDED.LINES, _
  542.                ORIG.COMMANDS$
  543. 5024  INPUT #2,LOGON.MAIL.LEVEL$, _
  544.                MACRO.DRVPATH$, _
  545.                MACRO.EXTENSION$, _
  546.                EMPHASIZE.ON.DEF$, _
  547.                EMPHASIZE.OFF.DEF$, _
  548.                FG.1.DEF$, _
  549.                FG.2.DEF$, _
  550.                FG.3.DEF$, _
  551.                FG.4.DEF$, _
  552.                SECVIO.HLP$
  553. 5025  INPUT #2,FOSSIL
  554. 5026  INPUT #2,MAX.CARRIER.WAIT, _
  555.                DF, _
  556.                SMART.TEXT, _
  557.                TIME.LOCK, _
  558.                WRITE.BUF.DEF, _
  559.                DF, _
  560.                DF, _
  561.                DF, _
  562.                AUTOPAGE.DEF$
  563. 5029  CLOSE 2
  564.       RETURN
  565. '
  566. ' OPENWORK - subroutine to open RBBS-PC's work file (2)
  567. '            (Stolen from RBBS-PC)
  568. '
  569. 9100  CLOSE 2
  570.       EC = 0
  571. 9110  OPEN CONFIG.FILENAME$ FOR INPUT ACCESS READ SHARED AS 2
  572. 9120  RETURN
  573. '
  574. '     Open a message file as file number 2
  575. '            (Stolen from RBBS-PC)
  576. '
  577. 9200  CLOSE 2
  578.       EC = 0
  579. 9210  OPEN ACTIVE.MESSAGE.FILE$ FOR RANDOM _
  580.            ACCESS READ WRITE _
  581.            LOCK WRITE AS #2 LEN = 128
  582.       IF EC > 0 THEN _
  583.          GOTO 9240
  584. 9220  FIELD 2,128 AS MESSAGE.RECORD$
  585. 9230  IF LOF(2) = 0 THEN _
  586.          EC = 999 : _
  587.          CLOSE 2 : _
  588.          KILL ACTIVE.MESSAGE.FILE$
  589. 9240  RETURN
  590. '
  591. '     OPENMASTER - subroutine to open the users file as #3
  592. '            (Stolen from RBBS-PC)
  593. '
  594. 9300  CLOSE 3
  595.       EC = 0
  596. 9310  OPEN MAIN.USER.FILE$ FOR RANDOM _
  597.            ACCESS READ _
  598.            SHARED _
  599.            AS 3 LEN = 128
  600. 9320  IF EC > 0 THEN _
  601.          GOTO 9370
  602. 9330  I# = LOF(3)
  603. 9340  MAIN.USER.SIZE = FIX(I#/128)
  604. 9350  FIELD 3, 31 AS MAIN.USER.NAME$, _
  605.                15 AS MAIN.PASSWORD$, _
  606.                 2 AS MAIN.SECURITY.LEVEL$, _
  607.                14 AS MAIN.USER.OPTIONS$,  _
  608.                24 AS MAIN.CITY.STATE$, _
  609.                 3 AS MAIN.MACHINE.TYPE$, _
  610.                 4 AS MAIN.TODAY.DL$, _
  611.                 4 AS MAIN.TODAY.BYTES$, _
  612.                 4 AS MAIN.DL.BYTES$, _
  613.                 4 AS MAIN.UL.BYTES$, _
  614.                14 AS MAIN.LAST.DATE.TIME.ON$, _
  615.                 3 AS MAIN.LIST.NEW.DATE$, _
  616.                 2 AS MAIN.USER.DOWNLOADS$, _
  617.                 2 AS MAIN.USER.UPLOADS$, _
  618.                 2 AS MAIN.ELAPSED.TIME$
  619. 9360  FIELD 3,128 AS MAIN.USER.RECORD$
  620. 9370  RETURN
  621. '
  622. '     OPENUSER - subroutine to open the users file as #4
  623. '            (Stolen from RBBS-PC)
  624. '
  625. 9400  CLOSE 4
  626.       EC = 0
  627. 9410  OPEN ACTIVE.USER.FILE$ FOR RANDOM _
  628.            ACCESS READ WRITE _
  629.            LOCK WRITE _
  630.            AS 4 LEN = 128
  631. 9420  IF EC > 0 THEN _
  632.          GOTO 9470
  633. 9430  I# = LOF(4)
  634. 9440  ACTIVE.USER.SIZE = FIX(I#/128)
  635. 9450  FIELD 4, 31 AS USER.NAME$, _
  636.                15 AS PASSWORD$, _
  637.                 2 AS SECURITY.LEVEL$, _
  638.                 2 AS TIMES.ON$, _
  639.                 2 AS LAST.MESSAGE$, _
  640.                 1 AS PROTOCOL$, _
  641.                 1 AS GRAPHIC.PREF$, _
  642.                 2 AS MARGIN.LENGTH$, _
  643.                 2 AS BIT.FLAGS$, _
  644.                 2 AS SUBSCRIPTION.BEGAN$, _
  645.                 1 AS PAGE.LENGTH$, _
  646.                 1 AS RESERVED.USE$, _
  647.                24 AS CITY.STATE$, _
  648.                 3 AS MACHINE.TYPE$, _
  649.                 4 AS TODAY.DL$, _
  650.                 4 AS TODAY.BYTES$, _
  651.                 4 AS DL.BYTES$, _
  652.                 4 AS UL.BYTES$, _
  653.                14 AS LAST.DATE.TIME.ON$, _
  654.                 3 AS LIST.NEW.DATE$, _
  655.                 2 AS USER.DOWNLOADS$, _
  656.                 2 AS USER.UPLOADS$, _
  657.                 2 AS ELAPSED.TIME$
  658. 9460  FIELD 4,128 AS USER.RECORD$
  659.       IF LOF(4) = 0 THEN _
  660.          EC = 999 : _
  661.          CLOSE 4 : _
  662.          KILL ACTIVE.USER.FILE$
  663. 9470   RETURN
  664. '
  665. ' *****************************************************************************
  666. ' *  Error handling for the separately compiled subroutines of RBBS-PC        *
  667. ' *****************************************************************************
  668. '
  669. 9900  EC = ERR
  670.       IF ERL < 9100 OR ERL > 9499 THEN _
  671.          PRINT "Trapped error";EC;"at line";ERL
  672.       RESUME NEXT
  673. '
  674. ' BRKFNAME - subroutine to split file name into components
  675. '            (Stolen from RBBS-PC)
  676. '
  677.       SUB BRKFNAME (FILENAME$,DRVPATH$,PREFIX$,EXTENSION$,FOR.JOINING) STATIC
  678. 60000 CALL ALLCAPS (FILENAME$)
  679.       DRVPATH$ = ""
  680.       PREFIX$ = ""
  681.       EXTENSION$ = ""
  682. 60100 CALL TRIMTRAIL (FILENAME$,"\")
  683.       L = LEN(FILENAME$)
  684.       IF L < 1 THEN _
  685.          EXIT SUB
  686. 60200 CALL FINDLAST (FILENAME$,"\",X,Y)
  687.       IF X < 1 THEN _
  688.          IF MID$(FILENAME$,2,1) = ":" THEN _
  689.             DRVPATH$ = LEFT$(FILENAME$,1) : _
  690.             S = 3 _
  691.          ELSE _
  692.             S = 1 _
  693.       ELSE _
  694.          DRVPATH$ = LEFT$(FILENAME$,X-1) : _
  695.          S = X + 1
  696. 60300 X = INSTR(FILENAME$ + ".",".")
  697.       IF X < L THEN _
  698.          EXTENSION$ = MID$(FILENAME$,X + 1,3)
  699.       IF S <= L THEN _
  700.          IF X >= S THEN _
  701.             PREFIX$ = MID$(FILENAME$,S,X - S)
  702. 60400 IF NOT FOR.JOINING THEN _
  703.          EXIT SUB
  704. 60500 IF LEN(DRVPATH$) = 1 THEN _
  705.          DRVPATH$ = DRVPATH$ + ":"
  706. 60600 IF INSTR(DRVPATH$,"\") > 0 THEN _
  707.          DRVPATH$ = DRVPATH$ + "\"
  708. 60700 IF LEN(EXTENSION$) > 0 THEN _
  709.          EXTENSION$ = "." + EXTENSION$
  710.       END SUB
  711. '
  712. '  TRIMTRAIL - subroutine to trim off trailing characters
  713. '            (Stolen from RBBS-PC)
  714. '
  715.       SUB TRIMTRAIL (TRIM.PARM$,TRIM.THIS$) STATIC
  716. 70000 WHILE RIGHT$(TRIM.PARM$,1) = TRIM.THIS$
  717.          TRIM.PARM$ = LEFT$(TRIM.PARM$,LEN(TRIM.PARM$) - 1)
  718.       WEND
  719.       END SUB
  720. '
  721. ' ALLCAPS - subroutine to convert string to upper case
  722. '            (Stolen from RBBS-PC)
  723. '
  724.       SUB ALLCAPS (CONVERT.FIELD$) STATIC
  725. 80000 FOR Z = 1 TO LEN (CONVERT.FIELD$)
  726.          Z.MID = ASC (MID$ (CONVERT.FIELD$, Z, 1))
  727.          IF Z.MID > 96 AND Z.MID < 123 THEN _
  728.             MID$ (CONVERT.FIELD$, Z, 1) = CHR$ (Z.MID - 32)
  729.       NEXT
  730.       END SUB
  731. '
  732. ' FINDLAST - subroutine to find last occurence of a string
  733. '            (Stolen from RBBS-PC)
  734. '
  735.       SUB FINDLAST (LOOK.IN$,LOOK.FOR$,WHERE.FOUND,NUM.FINDS) STATIC
  736. 90000 WHERE.FOUND = INSTR(LOOK.IN$,LOOK.FOR$)
  737.       NUM.FINDS = -(WHERE.FOUND > 0)
  738.       NEXT.FOUND = INSTR(WHERE.FOUND + 1,LOOK.IN$,LOOK.FOR$)
  739. 90100 WHILE NEXT.FOUND > 0
  740.          NUM.FINDS = NUM.FINDS + 1
  741.          WHERE.FOUND = NEXT.FOUND
  742.          NEXT.FOUND = INSTR(WHERE.FOUND + 1,LOOK.IN$,LOOK.FOR$)
  743.       WEND
  744.       END SUB
  745.